<!--
  功能：答卷管理
  作者：licy
  邮箱：licy@briup.com
  时间：2021年04月08日 15:35:37
  版本：v1.0
  修改记录：
  修改内容：
  修改人员：
  修改时间：
-->
<template>
  <div class=''>
    <div class="btns">
      <el-form inline size="small" style="text-align:center">
        <el-form-item>
          <el-select v-model="param.examId" clearable placeholder="请选择考试">
            <el-option v-for="exam in examData.list" :key="exam.id" :value="exam.id" :label="exam.name"></el-option>
          </el-select>
        </el-form-item>
         <el-form-item>
          <el-cascader filterable v-model="param.clazzId" clearable :options="directionClazzTree" placeholder="请选择班级" :props="{ children:'clazzes',label:'name',value:'id',emitPath: false}" ></el-cascader>
        </el-form-item>
        <el-form-item>
          <el-button @click="loadStudentExam" icon="el-icon-search" type="primary">搜索</el-button>
          <el-button @click="toDownloadScore" icon="el-icon-download" type="primary">下载</el-button>
        </el-form-item>
      </el-form>
    </div>
    <el-table size="small" :data="studentExamData.list" v-loading="loading">
      <el-table-column label="序号" type="index" :index="1"></el-table-column>
      <el-table-column label="校内学号" width="150" align="center">
        <template slot-scope="scope">
          <div>{{scope.row.student.schoolStuNo}}</div>
        </template>
      </el-table-column>
      <el-table-column label="学生姓名" width="100" align="center">
        <template slot-scope="scope">
          <div>{{scope.row.student.realname}}</div>
        </template>
      </el-table-column>
      <el-table-column label="班级"  align="center">
        <template slot-scope="scope">
          <div>{{scope.row.student.clazz}}</div>
        </template>
      </el-table-column>
      <el-table-column label="主观题成绩" prop="scoreSubjective" width="80" align="center"></el-table-column>
      <el-table-column label="客观题成绩" prop="scoreObjective" width="80" align="center"></el-table-column>
      <el-table-column label="总成绩" prop="score" width="60" align="center"></el-table-column>
     </el-table>
    <!-- 分页 -->
    <div class="page">
        <el-pagination background 
          layout="prev, pager, next,sizes" 
          small
          :total="studentExamData.total" 
          :page-size="studentExamData.pageSize" 
          :current-page="studentExamData.page"
          :page-sizes="[5, 10, 15, 20]"
          @size-change="handleSizeChange"
          @current-change="currentChangeHandler">
        </el-pagination>
    </div>
    <!-- 分页 -->
    <!-- 导出配置模态框 -->
    <el-dialog title="导出配置" :visible.sync="dialog_visible" width="30%" class="customer_modal">
      <div style="text-align:center;padding:20px 0">
        <el-button size="small" @click="downloadScore('current')">导出当前页</el-button>
        <el-button size="small" type="primary" @click="downloadScore('all')">全部导出</el-button>
      </div>
    </el-dialog>
    <!-- /模态框 -->
  </div>
</template>

<script>
import { get ,download} from '@/utils/request';
import {mapGetters} from 'vuex'
import _ from 'lodash'
export default {
  // 组件名称
  name: 'demo',
  // 组件参数 接收来自父组件的数据
  props: {},
  // 组件状态值
  data () {
   return {
     loading:false,
     dialog_visible:false,
     param:{
       page:1,
       pageSize:15,
      //  status:"完成"
     },
     studentExamData:{},
     examData:{}
   }
  },
  // 计算属性
  computed: {
     ...mapGetters(['directionClazzTree']),
  },
  // 侦听器
  watch: {},
  // 组件方法
  methods: {
    // 下载成绩
    downloadScore(type){
      let param = _.clone(this.param)
      for(let key in param){
        if(!param[key]){
          delete param[key]
        }
      }
      switch(type){
        case "current":
          break;
        case "all":
          param.pageSize = 10000;
          break;
      }
      let url = "/exam/se/downloadStudentScore"
      download(url,param);
    },
    // 去下载学生成绩信息
    toDownloadScore(){
       this.dialog_visible = true;
    },
    // 加载学生考试信息
    loadStudentExam(){
      this.loading = true;
      let url = "/exam/se/pageQuery"
      for(let k in this.param){
        let v = this.param[k]
        if(!v){
          delete this.param[k]
        }
      }
      get(url,this.param).then(resp => {
        this.studentExamData = resp.data;
        this.loading = false;
      })
    },
    // 查询考试信息
    loadExams(){
      // 添加loading,页面加载开始
      let url = "/exam/exam/pageQuery"
      get(url,{page:1,pageSize:100}).then(response => {
        this.examData = response.data;
      })
    },
    // 当前页发生改变
    currentChangeHandler(page){
      this.param.page = page;
      this.loadStudentExam();
    },
    // 处理分页大小变化的函数
    handleSizeChange(pageSize){
      // 当前页为第一页
      this.page = 1;
      // 页面大小为用户选择的页面
      this.param.pageSize = pageSize;
      this.loadStudentExam();
    },
  },
  // 以下是生命周期钩子
  /**
  * 组件实例创建完成，属性已绑定，但DOM还未生成，$ el属性还不存在
  */
  created () {
    this.loadStudentExam();
    this.loadExams();
  },
  /**
  * el 被新创建的 vm.$ el 替换，并挂载到实例上去之后调用该钩子。
  * 如果 root 实例挂载了一个文档内元素，当 mounted 被调用时 vm.$ el 也在文档内。
  */
  mounted () {
  },
  /**
  * 实例销毁之前调用。在这一步，实例仍然完全可用。
  */
  beforeDestroy () {
  },
  /**
  * Vue 实例销毁后调用。调用后，Vue 实例指示的所有东西都会解绑定，
  * 所有的事件监听器会被移除，所有的子实例也会被销毁。
  */
  destroyed () {
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<!--使用了scoped属性之后，父组件的style样式将不会渗透到子组件中，-->
<!--然而子组件的根节点元素会同时被设置了scoped的父css样式和设置了scoped的子css样式影响，-->
<!--这么设计的目的是父组件可以对子组件根元素进行布局。-->
<style scoped>

</style>
